import java.util.Iterator;

public class Juego {
	
	public final Jugador jugador;
	public final CorazonesVivos corazonesVivos;
	public int xMax = 30;
	public int yMax = 50;

	public Juego(){
		
		jugador = new Jugador(4,9);
		corazonesVivos = new CorazonesVivos();
		cargarCorazones(corazonesVivos);
	}
	
	private void cargarCorazones(CorazonesVivos corVivos){
		
		CorazonNovio corazonNovio1 = new CorazonNovio(7,-2);
		CorazonNovio corazonNovio2 = new CorazonNovio(1,-5);
		CorazonNovio corazonNovio3 = new CorazonNovio(2,0);
		CorazonNovio corazonNovio4 = new CorazonNovio(3,0);
		CorazonNovio corazonNovio5 = new CorazonNovio(4,-15);
		
		CorazonAjeno corazonAjeno1 = new CorazonAjeno(1,-19);
		CorazonAjeno corazonAjeno2 = new CorazonAjeno(3,-8);
		CorazonAjeno corazonAjeno3 = new CorazonAjeno(2,-12);
		CorazonAjeno corazonAjeno4 = new CorazonAjeno(3,0);
		CorazonAjeno corazonAjeno5 = new CorazonAjeno(2,0);
		
		corVivos.agregarCorazones(corazonNovio1);
		corVivos.agregarCorazones(corazonNovio2);
		corVivos.agregarCorazones(corazonAjeno2);
		corVivos.agregarCorazones(corazonAjeno3);
		corVivos.agregarCorazones(corazonNovio5);		
		corVivos.agregarCorazones(corazonAjeno1);
		corVivos.agregarCorazones(corazonNovio3);
		corVivos.agregarCorazones(corazonNovio4);
		corVivos.agregarCorazones(corazonAjeno4);
		corVivos.agregarCorazones(corazonAjeno5);	
	}

	/* Getters */
	public Jugador getJugador() {return jugador;}	
	public CorazonesVivos getCorazonesVivos() {	return corazonesVivos;}
		
	public < U extends Elemento & Movible> void mover(U elemento){
		Coordenadas nuevasCoordenadas = elemento.obtenerDestino();
		elemento.mover(nuevasCoordenadas);		
	}
	
	public void moverJugador(){
		if(jugador.vive()){
			mover(jugador);
		}
	}	
	
	public void moverCorazones() throws InterruptedException{
		Corazon corazonActual;
		Iterator<Corazon> it = corazonesVivos.Iterator();
		while(it.hasNext()){
			corazonActual = it.next();
			for(int j = 0; j < 1; j++){
				mover(corazonActual);
				Thread.sleep(40);
			}
		}
	}
	
	public void jugadorfijarDestinoDerecha() {jugador.fijarDestinoDerecha();}
	public void jugadorfijarDestinoIzquierda() {jugador.fijarDestinoIzquierda();}

}
